#ifndef PARSERENTRADAESTANDAR_H_
#define PARSERENTRADAESTANDAR_H_

#include <string>
#include <sstream>
#include <iostream>
#include <fstream>
#include <iomanip>
#include <list>
using std::string;
using std::stringstream;
using std::ofstream;
using std::ifstream;
using std::ios;
using std::cout;
using std::endl;
using std::list;

class ParserEntradaEstandar {
private:
	ofstream archSalida;
	int cantBytesLeidos;
	int content_length;
	bool primerArchivo;
	bool archivoActualValido;
	bool finDePost, esFinDeUnoDeLosArchivos;
	string boundary, boundaryFinPost;
	string nombreArchivoSalida;
	string nombreArchivoPrincipal;
	char* rutaDirectorioArchTemporales;
	list<string> listaDeNombresDeArchivos;
	list<string>::iterator it;
public:
	ParserEntradaEstandar(int content_length, char* ruta);

	int getContent_length() {return content_length;}
	int getCantBytesLeidos() {return cantBytesLeidos;}
	bool boundaryCoincide(string* lineaStr);
	bool marcaDeFinDeArchivo_Post(string* linea);
	void escribirLineaAArchivo(string* lineaStr);
	void leerLinea(char* linea);
	void analizarLinea(char* cadena);
	void levantarDatosDeCabecera();
	int crearArchivosAPartirDeEntradaEstandar();
	bool quedanBytesPorLeer();
	void crearNuevoArchivo();
	string buscarCadena(char* cadena, char* cadenaAHallar);
	void eliminarComillasYSaltoDeLinea();
	void setIterador() {it = listaDeNombresDeArchivos.begin();}
	string getNombreArchivoPpal() {return nombreArchivoPrincipal;}
	string getSiguienteNombreArch() {
		string str = *it;
		it++;
		return str;
	}
	~ParserEntradaEstandar() {}
};
#endif /* PARSERENTRADAESTANDAR_H_ */
